{
    // const rl = require("readline").createInterface({ input: process.stdin });
    // var iter = rl[Symbol.asyncIterator]();
    // const readline = async () => (await iter.next()).value;

    // void async function () {
    //     // Write your code here
    //     while(line = await readline()){
            
    //     }
    // }()
}

// {
//     // HJ17.坐标移动
//     // var s = 'A10;S20;W10;D30;X;A1A;B10A11;;A10;'
//     // let arr = s.split(';')
//     // getResult(arr)

//     // function getResult(arr) {
//     //     let result = [0, 0]
//     //     for (let i = 0; i < arr.length; i++) {
//     //         if (arr[i] != '') {
//     //             let s = getAxios(arr[i])
//     //             result[0] += s[0]
//     //             result[1] += s[1]
//     //         }
//     //     }
//     //     console.log(result.join(','))

//     // }

//     // function getAxios(str) {
//     //     let axios = str.split('')
//     //     let pos = axios.splice(0, 1)[0]
//     //     let num = +axios.join('')
//     //     if (num > 0 && ['A', 'D', 'W', 'S'].indexOf(pos) >= 0) {
//     //         if (pos == 'A') {
//     //             return [-num, 0]
//     //         } else if (pos == 'D') {
//     //             return [num, 0]
//     //         } else if (pos == 'W') {
//     //             return [0, num]
//     //         } else {
//     //             return [0, -num]
//     //         }

//     //     } else {
//     //         return [0, 0]
//     //     }
//     // }
// }
// {
//     //HJ20.密码验证合格程序
//     let arr = ['*jl2i*Y95pk$W^!71E']
//     validStr(arr)
//     function validStr(arr) {
//         let result = []
//         for (let i = 0; i < arr.length; i++) {
//            if (arr[i].length > 8 && vaildType(arr[i]) && vaildRepeat(arr[i])) {
//                 result[i] = 'OK'
//             } else {
//                 result[i] = 'NG'
//             }
//         }
//         for(let i = 0; i < result.length; i++) {
//             console.log(result[i])
//         }
//     }
//     function vaildType(str) {
//         let num = 0;
//         if (/[a-z]/.test(str)) {
//             num++
//         }
//         if (/[A-Z]/.test(str)) {
//             num++
//         }
//         if (/[0-9]/.test(str)) {
//             num++
//         }
//         if (/^[0-9a-zA-Z]/.test(str)) {
//             num++
//         }
//         return num >= 3
//     }

//     function vaildRepeat(str) {
//         for (let i = 0; i < str.length - 3; i++) {
//             let subStr = str.substr(i, 3)
//             let index = str.lastIndexOf(subStr)
//             if (index != i) {
//                 return false
//             }
//         }
//         return true
//     }
// }

// {

//     // HJ33 整数与IP地址间的转换
//     // Number(15).toString(2)  十进制的15转换成二进制数
//     // parseInt(num, x) x进制数的num转化成十进制
//     let arr = [10, 0, 3, 193]
//     getLong(arr)
//     function getLong(arr) {
//         for (let i = 0; i < arr.length; i++) {
//             let num = arr[i]
//             let s = []
//             let bool = true
//             while(bool) {
//                 let yu = num % 2
//                 num = Math.floor(num / 2)
//                 s.push(yu)
//                 if (num == 0) {
//                     bool = false
//                 }
//             }
            
//             if (s.length < 8) {
//                 s.push(...[0, 0, 0, 0, 0, 0, 0, 0].splice(0,8 - s.length))
//             }
//             arr[i] = s.reverse().join('')
//         }
//         let ll = arr.join('')
//         console.log(parseInt(ll, 2))
//     }

//     let num = 167969729
//     getIp(num)
//     function getIp(num) {
//         let s = []
//         let bool = true
//         while(bool) {
//             let yu = num % 2
//             num = Math.floor(num / 2)
//             s.push(yu)
//             if (num == 0) {
//                 bool = false
//             }
//         }
//         if (s.length < 32) {
//             s.push(...[0, 0, 0, 0, 0, 0, 0, 0].splice(0,32 - s.length))
//         }
//         s = s.reverse()
//         console.log(s)
//         let arr = []
//         while (s.length != 0) {
//             arr.push(parseInt(s.splice(0, 8).join(''), 2))
//         }
//         console.log(arr.join('.'))

// }

// }


// {
//     let arr = ['cat', 'to', 'boat']
//     arr.sort((a, b) => {
//         return a - b
//     })
//     console.log(arr)
// }

// {
//     // HJ27 查找兄弟单词
//     let arr = ['dac', 'abc', 'bac', 'cab']
//     let str = 'abc'
//     let num = 1
//     // a.split('').sort().join('')==b.split('').sort().join('')  判断是否是兄弟
//     getParent(str, arr, num)
//     function getParent(str, arr, num) {
//         let parent = []
//         let strArr =str.split('')
//         for (let i = 0; i < arr.length; i++) {
//             if (arr[i].length != str.length || arr[i] == str) {
//                 continue
//             } else {
//                 let a = arr[i].split('')
//                 for (let i = 0; i < strArr.length; i++) {
//                     let index = a.indexOf(strArr[i])
//                     if (index >= 0) {
//                         a.splice(index, 1)
//                     } else {
//                         break
//                     }
//                 }
//                 if (a.length == 0) {
//                     parent.push(arr[i])
//                 }
//             }
//         }
//         parent.sort()
        
//         console.log(parent.length)
//         if (parent.length >= num) {
//             console.log(parent[num - 1])
//         }

//     }
// }

// {
//     // NC52 有效括号序列
//     // * @param s string字符串 
//     // * @return bool布尔型
//     // */
//     let s = '()'
//     console.log(isValid(s))
//    function isValid( s ) {
//        var arr = s.split('')
//        let z = []
//        let left = ['{', '[', '(']
//        let right = ['}', ']', ')']
//        for (let i = 0; i < arr.length; i++) {
//         let li = left.indexOf(arr[i])
//         let ri = right.indexOf(arr[i])
//            if (li >= 0) {
//                z.push(arr[i])
//            } else if (ri >= 0) {
//                let t = z.pop()
//                if (left.indexOf(t) != ri) {
//                    return false
//                }
//            }
//        }
//        if (z.length == 0) {

//            return true
//        } else {
//             return false
//        }
//    }
//    function isValid(s) {
//     // write code here
//     if(s.length%2!==0) return false
//     const stack = []
//     for(let i = 0; i< s.length; i++) {
//         let current = s[i]
//         if(current === '(' || current === '[' || current === '{') {
//             stack.push(current)
//         }
//         else{
//             if(stack.length===0) return false
//             if(current===')') {
//                 if(stack.pop()!=='(') return false
//             }else if(current===']') {
//                 if(stack.pop()!=='[') return false
//             }else if(current==='}') {
//                 if(stack.pop()!=='{') return false
//             }
//         }
         
//     }
//     return !stack.length
//   }

// }

// {
//     // NC17 最长回文子串
//     let str = "civilwartestingwhetherthatnaptionoranynartionsoconceivedandsodedicatedcanlongendureWeareqmetonagreatbattlefiemldoftzhatwarWehavecometodedicpateaportionofthatfieldasafinalrestingplaceforthosewhoheregavetheirlivesthatthatnationmightliveItisaltogetherfangandproperthatweshoulddothisButinalargersensewecannotdedicatewecannotconsecratewecannothallowthisgroundThebravelmenlivinganddeadwhostruggledherehaveconsecrateditfaraboveourpoorponwertoaddordetractTgheworldadswfilllittlenotlenorlongrememberwhatwesayherebutitcanneverforgetwhattheydidhereItisforusthelivingrathertobededicatedheretotheulnfinishedworkwhichtheywhofoughtherehavethusfarsonoblyadvancedItisratherforustobeherededicatedtothegreattdafskremainingbeforeusthatfromthesehonoreddeadwetakeincreaseddevotiontothatcauseforwhichtheygavethelastpfullmeasureofdevotionthatweherehighlyresolvethatthesedeadshallnothavediedinvainthatthisnationunsderGodshallhaveanewbirthoffreedomandthatgovernmentofthepeoplebythepeopleforthepeopleshallnotperishfromtheearth"
//     // getLongestPalindrome(str)
//     // 超时了
//     function getLongestPalindrome( A ) {
//         let max = ''
//         for (let i = 0; i < A.length; i++) {
//             for (let j = A.length - 1; j > i; j--) {
//                 console.log(i, j)
//                 let str = A.substr(i, j - i + 1)
//                 let rever = str.split('').reverse().join('')
//                 if (str == rever) {
//                     max = str.length > max.length ? str : max
//                     console.log(`当前${i} - ${j}找到一个`)
//                     continue
//                 }
//             }
//         }
//         console.log(max.length || 1)
//         return max.length || 1
        
//     }

//     // 双指针
//     function getLongestPalindrome( A ) {
//         let res = ''
//         for(let i = 0; i < A.length; i++) {
//             let str1 = extendText(A, i, i)
//             let str2 = extendText(A, i, i+1)
//             const temp = str1.length > str2.length ? str1 : str2
//             res = res.length > temp.length ? res : temp
//         }
//         return res.length
        
//     }
//     function extendText(str, l, r) {
//         while(l >= 0 && r <= str.length - 1) {
//             if(str[l] == str[r]) {
//                 l--
//                 r++
//             }else{
//                 break
//             }
//         }
//         return str.substring(l+1, r)
//     }

// }

{
    // HJ41 称砝码
    // let arr = [1, 1, 2]
    let arr = [1, 1, 1, 1, 1]
    getTypes(arr)
    function getTypes(arr) {
        let set = new Set()
        set.add(0)
        for (let i = 0; i < arr.length; i++) {
            for (let s of [...set]) {
                set.add(s + arr[i])
            }
        }
        console.log(set.size)
    }

    // 递归
    // let set = new Set()
    // set.add(0)
    // getTypess(arr)
    // function getTypess(arr) {
        
    //     let ss = getWeight(0, arr, [0, 0])
    //     set.add(ss[0])
    //     set.add(ss[1])
    //     console.log(set)
    //     console.log(set.size)
    // }
    // function getWeight(i, arr, res) {
    //     if (i == arr.length - 1) {
    //         set.add(arr[i])
    //         return [arr[i], 0]
    //     } else {
    //         let w = arr[i] + getWeight(i + 1, arr) // 取0位置的
    //         let ww = getWeight(i + 1, arr) // 不取
    //         return [w, ww]
    //     }
    // }
}